//
//  main.m
//  03-集合
//
//  Created by dllo on 16/7/6.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
    // 1.数组
    // 1> 数组: 可变数组NSMutableArray 与不可变数组NSArray
    // 数组主要是有序的存放元素的集合类型, 并且可以通过下标取值
    // 数组中只能存放OC对象类型
    // 不可变数组 只能取值
    // 可变数组 可以进行增,删,改的操作
    
    // 2> 初始化数组
    // <1> initWithObjects 后面填入的参数一定是对象类型
    // 可变参数 C语言中的链表
    NSArray *array = [[NSArray alloc] initWithObjects:@"say", nil, @"hi", nil];
    // <2> 构造器方法
    NSArray *arr = [NSArray arrayWithObjects:@"111", @"222", nil];
    // <3> 字面量 同NSString @""
    // * 三种初始化方式, 推荐使用字面量 字面量可以识别对象是否为空值;但一般的初始化方法不可以
    // 如果为空, 字面量会崩溃
    // 初始化方法会识别nil为结束标识, 造成数据丢失
    NSArray *arrOne = @[@"123", @"456", @"789"];
    
    // 3> 取值相关
    // <1> count 取得数组中元素个数
    NSLog(@"%ld", array.count);
    // <2> 数组中取值, 通过下标去取值
    id string = [arr objectAtIndex:0];
    // <3> 语法糖 快捷取值
    NSString *numberString = arr[0];
    // <4> 根据值取对应下标
    NSUInteger indexOfObject = [arr indexOfObject:@"say"];
    // <5> 判断对象是否存在于数组中
    BOOL isHaveObject = [array containsObject:@"say"];
    NSLog(@"%@", isHaveObject ? @"YES" : @"NO");
    // <6> 取数组中第一个元素/ 最后一个元素(如果数组为空, 返回的对象为空, 并且不会崩溃)
    [arr firstObject];
    [arr lastObject];
    
    // 4> 不可变数组,改变元素(会生成新的数组, 不会再原数组基础上修改)
    //  数组添加一个新的元素
    [arr arrayByAddingObject:@"add"];
    //  数组添加另外一个数组中的所有元素
    [arr arrayByAddingObjectsFromArray:array];
    
#pragma mark - 可变数组
    // 1.初始化方法
//    NSMutableArray *mutableArray = [NSMutableArray alloc] initWithObjects:<#(nonnull id), ...#>, nil
    // 字面量创建方法, 不推荐使用
//    NSMutableArray *mutableArray = [@[@"123"] mutableCopy];
    NSMutableArray *mutableArray = [NSMutableArray array];
    // 2.取值相关
    // 与不可变数组一样
    
    // 3 可变数组改变元素
    // 添加
    [mutableArray addObject:@"123"];
    // 插入
    [mutableArray insertObject:@"不合格" atIndex:0];
    // 移除下标为0的元素
    [mutableArray removeObjectAtIndex:0];
    // 移除最后一个元素
    [mutableArray removeLastObject];
    // 移除所有元素
    [mutableArray removeAllObjects];
    // 元素替换
//    [mutableArray replaceObjectAtIndex:0 withObject:@"sb"];
    
#pragma mark - 可变与不可变的区别
    // 1.可变是可以修改的, 但不可变不可以
    // 2.不可变调用改变的方法时, 会生成新的对象; 可变调用改变方法时, 对象本身发生改变
    // 3.可变:不可变
    
    // 将字符串根据某个子串, 截取成数组
    // 根据哪个子串截取,该子串就会消失
    NSString *urlString = @"www.4399.com";
    NSArray *urlArr = [urlString componentsSeparatedByString:@"."];
    NSLog(@"%@", urlArr);
    
#pragma mark - 根据某个字符串, 把数组拼接成一个字符串
    NSArray *nameArr = @[@"韩旭", @"隔壁", @"老王"];
    NSString *nameString = [nameArr componentsJoinedByString:@"&"];
    
    return 0;
}
